<!DOCTYPE html>
<html lang="zh" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="description" content="fusion-docs">
<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">

<meta name="lang:clipboard.copy" content="Copy to clipboard">
<meta name="lang:clipboard.copied" content="Copied to clipboard">
<meta name="lang:search.language" content="">
<meta name="lang:search.pipeline.stopwords" content="true">
<meta name="lang:search.pipeline.trimmer" content="true">
<meta name="lang:search.result.none" content="No matching documents">
<meta name="lang:search.result.one" content="1 matching document">
<meta name="lang:search.result.other" content="# matching documents">
<meta name="lang:search.tokenizer" content="[\s\-]+">


<meta name="description" content="fusion-docs">
<link rel="shortcut icon" href="assets/images/favicon.png">
<title>反应式宣言 2.0 · Akka Fusion</title>
<link rel="stylesheet" href="assets/stylesheets/application.451f80e5.css">
<link rel="stylesheet" href="assets/stylesheets/application-palette.22915126.css">
<meta name="theme-color" content="#3f51b5" />
<link rel="stylesheet" href="lib/material__tabs/dist/mdc.tabs.min.css">
<link rel="stylesheet" href="lib/prettify/prettify.css">
<script src="assets/javascripts/modernizr.1aa3b519.js"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
<style>
body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
</style>
<link rel="stylesheet" href="assets/fonts/font-awesome.css">
<link rel="stylesheet" href="assets/fonts/material-icons.css">
<link rel="stylesheet" href="assets/stylesheets/paradox-material-theme.css">
</head>
<body
data-md-color-primary="indigo"
data-md-color-accent="red"
>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid">
<div class="md-flex">
<div class="md-flex__cell md-flex__cell--shrink">
<a href="index.html" title="Akka Fusion" class="md-header-nav__button md-logo">
<i class="md-icon">local_library</i>
</a>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
</div>
<div class="md-flex__cell md-flex__cell--stretch">
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
<span class="md-header-nav__topic">
Akka Fusion
</span>
<span class="md-header-nav__topic">
反应式宣言 2.0
</span>
</div>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
<label class="md-icon md-search__icon" for="__search"></label>
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">&#xE5CD;</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="result">
<div class="md-search-result__meta">
Type to start searching
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>

</div>
<div class="md-flex__cell md-flex__cell--shrink">
<div class="md-header-nav__source">
<a href="https://github.com/akka-fusion/akka-fusion"
title="Go to repository"
class="md-source"
data-md-source="github">
<div class="md-source__icon">
<i class="fa fa-github"></i>
</div>
<div class="md-source__repository">
akka-fusion/akka-fusion
</div>
</a>

</div>
</div>
</div>
</nav>
</header>

<div class="md-container">
<main class="md-main">
<div class="md-main__inner md-grid" data-md-component="container">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
<label class="md-nav__title md-nav__title--site" for="drawer">
<a href="index.html" title="Akka Fusion" class="md-nav__button md-logo">
<span class="md-nav__button md-logo">
<i class="md-icon">local_library</i>
</a>
<a href="index.html" title="Akka Fusion">
Akka Fusion
</a>
</label>
<div class="md-nav__source">
<a href="https://github.com/akka-fusion/akka-fusion"
title="Go to repository"
class="md-source"
data-md-source="github">
<div class="md-source__icon">
<i class="fa fa-github"></i>
</div>
<div class="md-source__repository">
akka-fusion/akka-fusion
</div>
</a>

</div>
<ul>
  <li><a href="intro/index.html" class="page">简介</a></li>
  <li><a href="core/index.html" class="page">核心</a>
  <ul>
    <li><a href="core/akka-extension.html" class="page">Akka Extension（扩展）</a></li>
    <li><a href="core/http-route.html" class="page">Http Route（异步处理器）</a></li>
    <li><a href="core/fusion-core.html" class="page">FusionCore</a></li>
  </ul></li>
  <li><a href="http/index.html" class="page">HTTP</a>
  <ul>
    <li><a href="http/getting.html" class="page">开始</a></li>
    <li><a href="http/management.html" class="page">管理API</a></li>
    <li><a href="http/interceptor-chain.html" class="page">Interceptor Chain（拦截器链）</a></li>
  </ul></li>
  <li><a href="discovery-client/index.html" class="page">服务注册、发现（Client）</a>
  <ul>
    <li><a href="discovery-client/nacos.html" class="page">连接 Nacos</a></li>
  </ul></li>
  <li><a href="http-gateway/index.html" class="page">HTTP 代理网关</a></li>
  <li><a href="jdbc/index.html" class="page">Jdbc</a></li>
  <li><a href="slick/index.html" class="page">Slick</a></li>
  <li><a href="mybatis/index.html" class="page">MyBatis</a>
  <ul>
    <li><a href="mybatis/getting.html" class="page">起步</a></li>
    <li><a href="mybatis/configuration.html" class="page">配置</a></li>
  </ul></li>
  <li><a href="data-mongodb/index.html" class="page">Data Mongodb</a></li>
  <li><a href="data-kafka/index.html" class="page">Data Kafka</a>
  <ul>
    <li><a href="data-kafka/getting.html" class="page">开始</a></li>
    <li><a href="data-kafka/producer.html" class="page">Kafka Producer</a></li>
    <li><a href="data-kafka/consumer.html" class="page">Kafka Consumer</a></li>
  </ul></li>
  <li><a href="inject/index.html" class="page">依赖管理</a>
  <ul>
    <li><a href="inject/guice.html" class="page">使用 Guice 进行类依赖管理</a></li>
  </ul></li>
  <li><a href="log/index.html" class="page">日志</a></li>
  <li><a href="configuration/index.html" class="page">配置</a>
  <ul>
    <li><a href="configuration/core.html" class="page">Fusion Core 配置</a></li>
    <li><a href="configuration/http.html" class="page">Fusion HTTP 配置</a></li>
    <li><a href="configuration/http-gateway.html" class="page">Fusion HTTP Gateway 配置</a></li>
    <li><a href="configuration/jdbc.html" class="page">Fusion JDBC 配置</a></li>
    <li><a href="configuration/slick.html" class="page">Fusion Slick 配置</a></li>
    <li><a href="configuration/mybatis.html" class="page">Fusion Mybatis 配置</a></li>
    <li><a href="configuration/mongodb.html" class="page">Fusion Mongodb 配置</a></li>
    <li><a href="configuration/kafka.html" class="page">Fusion Kafka 配置</a></li>
  </ul></li>
  <li><a href="reactivemanifesto.html" class="active page">反应式宣言 2.0</a></li>
</ul>
<nav class="md-nav md-nav--secondary">
</nav>

</nav>
<ul style="display: none">
<li class="md-nav__item md-version" id="project.version">
<label class="md-nav__link" for="__version">
<i class="md-icon" title="Version">label_outline</i> 2.0.6
</label>
</li>
</ul>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<div class="md-content__searchable">
<h1><a href="#反应式宣言-2-0" name="反应式宣言-2-0" class="anchor"><span class="anchor-link"></span></a>反应式宣言 2.0</h1>
<p><em>在此摘录《反应式宣言》全文，原方地址可通过：<a href="https://www.reactivemanifesto.org/zh-CN">https://www.reactivemanifesto.org/zh-CN</a> 访问。</em></p>
<p>版本 2.0，2014 年 9 月 16 日发布</p>
<p>在不同领域中深耕的组织都在不约而同地尝试发现相似的软件构建模式。 希望这些系统会更健壮、更具回弹性 、更灵活，也能更好地满足现代化的需求。</p>
<p>近年来，应用程序的需求已经发生了戏剧性的更改，模式变化也随之而来。仅在几年前， 一个大型应用程序通常拥有数十台服务器、 秒级的响应时间、 数小时的维护时间以及GB级的数据。 而今，应用程序被部署到了形态各异的载体上, 从移动设备到运行着数以千计的多核心处理器的云端集群。 用户期望着毫秒级的响应时间，以及服务100%正常运行（随时可用）。 而数据则以PB计量。 昨日的软件架构已经根本无法满足今天的需求。</p>
<p>我们相信大家需要一套贯通整个系统的架构设计方案， 而设计中必需要关注的各个角度也已被理清： 我们需要系统具备以下特质：即时响应性（Responsive）、回弹性（Resilient）、弹性（Elastic）以及消息驱动（Message Driven）。 对于这样的系统，我们称之为反应式系统（Reactive System）。</p>
<p>使用反应式方式构建的反应式系统会更加灵活、松耦合、<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Scalability">可伸缩</a>。 这使得它们的开发和调整更加容易。 它们对系统的<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Failure">失败（failure）</a>也更加的包容， 而当失败确实发生时， 它们的应对方案会是得体处理而非混乱无序。 反应式系统具有高度的即时响应性， 为<a href="https://www.reactivemanifesto.org/zh-CN/glossary#User">用户</a>提供了高效的互动反馈。</p>
<p><em>反应式系统的特质：</em></p>
<ul>
  <li>
  <p><strong>即时响应性</strong>：只要有可能， <a href="https://www.reactivemanifesto.org/zh-CN/glossary#System">系统</a>就会及时地做出响应。 即时响应是可用性和实用性的基石， 而更加重要的是，即时响应意味着可以快速地检测到问题并且有效地对其进行处理。 即时响应的系统专注于提供快速而一致的响应时间， 确立可靠的反馈上限， 以提供一致的服务质量。 这种一致的行为转而将简化错误处理、 建立最终用户的信任并促使用户与系统作进一步的互动。</p></li>
  <li>
  <p><strong>回弹性</strong>：系统在出现<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Failure">失败</a>时依然保持即时响应性。 这不仅适用于高可用的、 任务关键型系统——任何不具备回弹性的系统都将会在发生失败之后丢失即时响应性。 回弹性是通过<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Replication">复制</a>、 遏制、 <a href="https://www.reactivemanifesto.org/zh-CN/glossary#Isolation">隔离</a>以及<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Delegation">委托</a>来实现的。 失败的扩散被遏制在了每个<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Component">组件</a>内部， 与其他组件相互隔离， 从而确保系统某部分的失败不会危及整个系统，并能独立恢复。 每个组件的恢复都被委托给了另一个（外部的）组件， 此外，在必要时可以通过复制来保证高可用性。 （因此）组件的客户端不再承担组件失败的处理。</p></li>
  <li>
  <p><strong>弹性</strong>： 系统在不断变化的工作负载之下依然保持即时响应性。 反应式系统可以对输入（负载）的速率变化做出反应，比如通过增加或者减少被分配用于服务这些输入（负载）的<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Resource">资源</a>。 这意味着设计上并没有争用点和中央瓶颈， 得以进行组件的分片或者复制， 并在它们之间分布输入（负载）。 通过提供相关的实时性能指标， 反应式系统能支持预测式以及反应式的伸缩算法。 这些系统可以在常规的硬件以及软件平台上实现成本高效的<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Elasticity">弹性</a>。</p></li>
  <li>
  <p><strong>消息驱动</strong>：反应式系统依赖<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Asynchronous">异步的</a><a href="https://www.reactivemanifesto.org/zh-CN/glossary#Message-Driven">消息传递</a>，从而确保了松耦合、隔离、<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Location-Transparency">位置透明</a>的组件之间有着明确边界。 这一边界还提供了将<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Failure">失败</a>作为消息委托出去的手段。 使用显式的消息传递，可以通过在系统中塑造并监视消息流队列， 并在必要时应用<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Back-Pressure">回压</a>， 从而实现负载管理、 弹性以及流量控制。 使用位置透明的消息传递作为通信的手段， 使得跨集群或者在单个主机中使用相同的结构成分和语义来管理失败成为了可能。 <a href="https://www.reactivemanifesto.org/zh-CN/glossary#Non-Blocking">非阻塞的</a>通信使得接收者可以只在活动时才消耗<a href="https://www.reactivemanifesto.org/zh-CN/glossary#Resource">资源</a>， 从而减少系统开销。</p></li>
</ul>
<p>大型系统由多个较小型的系统所构成， 因此整体效用取决于它们的构成部分的反应式属性。 这意味着， 反应式系统应用着一些设计原则，使这些属性能在所有级别的规模上生效，而且可组合。世界上各类最大型的系统所依赖的架构都基于这些属性，而且每天都在服务于数十亿人的需求。现在，是时候在系统设计一开始就有意识地应用这些设计原则了， 而不是每次都去重新发现它们。</p>
<p><a href="http://www.reactivemanifesto.org/#sign-button">签署反应式宣言</a></p>
</div>
<div>
<a href="https://github.com/akka-fusion/akka-fusion/tree/master/fusion-docs/src/main/paradox/reactivemanifesto.md" title="Edit this page" class="md-source-file md-edit">
Edit this page
</a>
</div>
<div class="print-only">
<span class="md-source-file md-version">
2.0.6
</span>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="configuration/kafka.html" title="Fusion Kafka 配置" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Fusion Kafka 配置
</span>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Powered by
<a href="https://github.com/lightbend/paradox">Paradox</a>
and
<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>

</div>
<div class="md-footer-social">
<a href="https://akka-fusion.github.io/akka-fusion/" class="md-footer-social__link fa fa-globe"></a><a href="https://github.com/akka-fusion" class="md-footer-social__link fa fa-github"></a><a href="https://weibo.com/yangbajing" class="md-footer-social__link fa fa-globe"></a>
</div>

</div>
</div>
</footer>

</div>
<script src="assets/javascripts/application.583bbe55.js"></script>
<script src="assets/javascripts/paradox-material-theme.js"></script>
<script>app.initialize({version:"0.17",url:{base:"."}})</script>
<script type="text/javascript" src="lib/prettify/prettify.js"></script>
<script type="text/javascript" src="lib/prettify/lang-scala.js"></script>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function(event) {
window.prettyPrint && prettyPrint();
});
</script>
</body>
</html>
